review E: follow-up review docs/30 (R1-R9) - #66
Merged
Conversation
…rtable run names, cancel lifetime, conversion ownership, numeric domains, rewrite coverage, audit acceptance, nested reservations, main-thread stack Code review E (docs/30_code_review_2026-09-08.md, findings R1 to R9) plus the cleanup notes on model identity and the MBR worker's empty outputs. R1. Enabling DeepLC fine-tuning with its own defaults was rejected at load, because finetune_batch = 0 is the documented automatic batch size and review A's validation demanded a positive batch. Only the epoch count is bounded now. R2. run-experiment --run-names accepted `a` and `a.`, one directory on Windows, and the second run overwrote the first with exit 0. Names ending in a dot or a space, containing <>:"|?* or a control character, or naming a Windows reserved device are rejected on every platform before anything is written. R3. A desktop stop could sweep temporary files that belonged to the next run in the same folder: the sweep ran after the reservation was released, and a stop on a finished run swept too. Cancellation is intent and kill only, inert once the run is terminal, and holds the pid lock across the kill; the waiter retires the pid under that lock, sweeps, then releases, so a stop still killing finishes before the folder changes hands. The progress thread writes only while active. R4. Two searches converting the same vendor file concurrently shared one temporary output and one could publish the other's bytes. Each conversion writes a unique partial file under a lock beside the destination; a concurrent converter waits and reuses the result; a lock whose holder stopped writing for fifteen minutes is broken. R5. Domain checks for the numeric settings review A left unchecked, with the boundaries tested as accepted. R6. The fine-tune and re-prediction worker zipped predictions with peptidoforms without checking the count and silently kept the imported iRT for anything it did not predict. A count mismatch is an error; rows keeping their imported value are counted in <lib_out>.summary.json and the engine warns when there are any. Rows are not dropped: candidate_id is the contiguous index the fragment table references, and renumbering both tables for a rare event is a worse risk. R7. The audit's reported flag repeated the precursor gate; it follows the rejection reason now, a decoy past both gates is REMOVED_DURING_REPORTING, and a present precursor_q column of the wrong type is an error rather than a fallback. R8. The desktop reservation compared exact folders only; ancestors and descendants of an active folder are refused, siblings are not. R9. The Windows debug binary overflowed its 1 MiB main-thread stack on --version. The CLI runs on a thread with a 256 MiB reservation, and tests/cli_version.rs runs the built binary. Model identities carry the installed DeepLC and MS2PIP versions. With nothing to transfer the MBR worker writes a full-schema empty transfer table and the requested augmented scored table unflagged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…t, E. coli FASTA run) in docs/30
This was referenced Sep 8, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fifth stacked review PR (
docs/30_code_review_2026-09-08.md, all nine findings). Base isreview/d-provenance(#65); merge #61, A, B, C, D, then this.Findings
finetune_batch = 0is the automatic batch size again; onlyfinetune_epochs >= 1is required when the fine-tune is onenabling_the_fine_tune_keeps_the_automatic_batch: omitted, zero and positive batch accepted, zero epochs rejectedportable_dir_name_problem: trailing dots and spaces, the characters `<>:"cancelis intent and kill only, inert once terminal, holds the pid lock across the kill;publish_exitretires the pid under that lock, sweeps, then releases; the progress thread writes only while active (set_if_active)a_late_stop_after_the_run_ended_leaves_the_folder_alone(another owner's temp file survives),a_stop_still_in_flight_finishes_before_the_folder_is_released(reservation held while the kill is in flight)<stem>.partial-<pid>-<n>.mzMLand a<destination>.convertinglock; a concurrent converter waits and reuses the finished mzML; a lock whose holder stopped writing for 15 min is brokena_conversion_lock_is_exclusive_and_released_on_drop,a_stale_lock_is_broken_and_a_fresh_one_is_honouredfolds >= 2,promote_top_peaks <= retain_top_peaks, power-of-two bucket size), boundaries tested as acceptednumeric_domains_are_validated_at_load<lib_out>.summary.json; the engine warns when the count is non-zerorewrite_irt;warn_on_retained_importedreported=rejection_reason == REPORTED; a decoy past both gates isREMOVED_DURING_REPORTING; a presentprecursor_qof the wrong type is an error, only an absent column falls backthe_reported_flag_follows_the_reason_and_the_report_rules,a_present_but_malformed_precursor_q_column_is_an_error_not_a_fallbackoverlapping_result_folders_are_refused_in_both_orders_but_siblings_are_nottests/cli_version.rsruns the built binary's--versionand--helpCleanup notes: model identities carry the installed versions (
deeplc-4.1.1-base,deeplc-4.1.1-finetuned,ms2pip-4.2.0-HCDch2); the MBR worker writes a full-schema empty transfer table and an unflagged augmented scored table when there is nothing to transfer (test updated); the desktop progress thread no longer writes after publication.Pushback, recorded in the docs/30 status section
candidate_idis the contiguous index the fragment table references, so dropping would mean renumbering both tables for a rare event. A structural mismatch errors; retained imported values are counted and warned about.Local checks
Engine
cargo fmt --check,clippy -D warnings,cargo test --workspace(266 tests, including the new binary subprocess tests); desktopclippy+cargo test --lib(81);pytest tests/python/test_mbr_worker.py tests/python/test_predictor_workers.py(29 passed, 3 skipped);python -m compileall scripts;ci/gen_config_reference.pyregenerated (line shifts only);ci/check_doc_refs.py;ci/check_desktop_ui.py. The debug binary's--versionoverflow was reproduced on this machine before the change.🤖 Generated with Claude Code